home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
MACSHELL
/
MS1
/
COMMANDS
/
PATHCMDS.C
< prev
next >
Wrap
Text File
|
1992-12-02
|
7KB
|
288 lines
/*
* MacShell Source File
*
* Copyright (c) 1989, 1990, 1991, 1992 Suick Bay Technologies. All rights reserved.
*
*
* RESTRICTIONS ON MacShell program and source code.
*
* Ñ╩MacShell¬ is a product of Suick Bay Technologies and is provided for
* restricted use by the owner of the CDROM "Disk to the future II".
*
* Ñ╩No permission is granted for any commercial use without the written
* consent of the Suick Bay Technologies.
*
* Ñ╩No permission is granted for any redistribution of any kind use without
* the written consent of the Suick Bay Technologies.
*
* Ñ╩Permission is granted to use this for any personal noncommercial use.
*
* Ñ╩You may not distribute source or executable code at all, nor may you
* distribute it with or within a commercial product without the written
* consent of the Suick Bay Technologies. Please send modifications to
* the author for inclusion in updates to the program. Thanks.
*
*
* MacShell¬ IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
*
* SUICK BAY TECHNOLOGIES SHALL HAVE NO LIABILITY WITH RESPECT TO THE
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY MACSHELL
* OR ANY PART THEREOF.
*
* In no event will Suick Bay Technologies be liable for any lost revenue
* or profits or other special, indirect and consequential damages, even if
* Suick Bay Technologies has been advised of the possibility of such damages.
*
* Suick Bay Technologies can be reached at:
*
* 8768 Cottonwood lane
* Maple Grove, MN 55369
* Voice: (612) 425-7025
* AppleLink: D5233
*
*
* No parts of this software may be reproduced or stored in a
* retrieval system or transmitted in any form, or any means,
* electronic, mechanical, photocopying, recording or otherwise,
* without the prior written permission of Suick Bay Technologies.
*
* Spread the word and not the disk.
*
* SPK 012290 : Initial
*/
#include "SystemPub.h"
#include "Proc.h"
#include "ShellPub.h"
#include "Path.h"
/********************************************************************
* Set working directory dialog
********************************************************************/
#define FINDDLOG 1010 /* Set working dir dialog */
#define FLDRBUTN 11 /* The "Set" button */
/*******************************************************************/
pascal Boolean folderFilter(p)
ParmBlkPtr p;
{
if ((p->fileParam.ioFlAttrib & 0x10) != 0)
return(false);
return(true);
}
/*******************************************************************/
pascal int16 getDirHook( item, dPtr )
short item;
DialogPtr dPtr;
{
int16 returnItem;
returnItem = item;
switch( item )
{
case -1:
break;
case FLDRBUTN:
returnItem = 1;
break;
};
return( returnItem );
}
/*******************************************************************/
static SFReply setReply;
SetDirFolder( WHandle ShellWh )
{
Point SFGwhere;
SFTypeList typeList;
ShellWindRec **MyShell;
SFGwhere.h = 90;
SFGwhere.v = 90;
SFPGetFile( SFGwhere, "\p", folderFilter, 0, typeList,
getDirHook, &setReply, FINDDLOG, nil );
MyShell = (ShellWindRec **) (**ShellWh).thing;
if( setReply.good );
{
SetVol( NULL, setReply.vRefNum );
GetPWDInfo( &(**MyShell).pwdVRefNum,
&(**MyShell).pwdDirID, &(**MyShell).parDirID );
ResetShellPWD( ShellWh );
}
}
/*******************************************************************/
Boolean DoCD( int16 ProcToken, WHandle ShellWh, int16 ProcID,
char *string )
{
char *cp, argument[ 256 ];
pathType pt;
ShellWindRec **MyShell;
int16 i, argc;
int32 newDirID = 0;
MyShell = (ShellWindRec **) (**ShellWh).thing;
switch( ProcToken )
{
case PROC_INIT :
(**MyShell).Proc[ ProcID ].flags = TRUE;
break;
case PROC_TERM :
case PROC_BREAK :
/* Tell the shell that we're done */
SendOutToken( ShellWh, ProcID, PROC_BREAK );
/* Turn ourself off */
(**MyShell).Proc[ ProcID ].ProcActive = FALSE;
break;
case PROC_STDIN :
if( (**MyShell).Proc[ ProcID ].flags )
{
(**MyShell).Proc[ ProcID ].flags = FALSE;
#ifdef DEMO
procPrintf( ShellWh, ProcID,
"cd : Demo version, cd is not available\n" );
#else
if( (**MyShell).Proc[ ProcID ].argc == 1 )
{
char *cp;
cp = ShellGetVar( ShellWh, "CDPATH" );
strcpy( argument, cp );
}
else
{
argc = (**MyShell).Proc[ ProcID ].argc;
for( i = 1; i < argc; i++ )
{
GetArgv( ShellWh, ProcID, i, argument );
cp = argument;
if( *cp++ == '-' )
{
while( *cp )
switch( *cp++ )
{
case 'd' :
SetDirFolder( ShellWh );
goto EndCD;
case 'i' :
i++;
GetArgv( ShellWh, ProcID, i, argument );
CtoPstr( argument );
if( GoodNum( argument ) )
{
int16 err;
StringToNum( argument, &newDirID );
if( err = SetWD( (**MyShell).pwdVRefNum, newDirID ) )
procPrintf( ShellWh, ProcID,
"cd : can't set DirID %ld (%d)\n", newDirID, err );
else
(**MyShell).pwdDirID = newDirID;
ResetShellPWD( ShellWh );
}
else
procPrintf( ShellWh, ProcID,
"cd : can't set DirID %s\n", argument );
goto EndCD;
}
}
}
GetArgv( ShellWh, ProcID, 1, argument );
}
ResetShellPWD( ShellWh );
pt = SetCurrPath( argument );
if( pt == pathIsDir || pt == pathIsVol )
GetPWDInfo( &(**MyShell).pwdVRefNum,
&(**MyShell).pwdDirID, &(**MyShell).parDirID );
else
procPrintf( ShellWh, ProcID, "cd : can't set %s (%d)\n", argument, pt );
ResetShellPWD( ShellWh );
EndCD:
#endif
/* Tell the shell that we're done */
SendOutToken( ShellWh, ProcID, PROC_BREAK );
/* Turn ourself off */
(**MyShell).Proc[ ProcID ].ProcActive = FALSE;
return( FALSE );
}
}
}
/*******************************************************************/
Boolean DoPWD( int16 ProcToken, WHandle ShellWh, int16 ProcID,
char *string )
{
char str[ 256 ];
int16 err;
ShellWindRec **MyShell;
MyShell = (ShellWindRec **) (**ShellWh).thing;
switch( ProcToken )
{
case PROC_INIT :
(**MyShell).Proc[ ProcID ].flags = TRUE;
break;
case PROC_TERM :
case PROC_BREAK :
/* Tell the shell that we're done */
SendOutToken( ShellWh, ProcID, PROC_BREAK );
/* Turn ourself off */
(**MyShell).Proc[ ProcID ].ProcActive = FALSE;
break;
case PROC_STDIN :
if( (**MyShell).Proc[ ProcID ].flags )
{
(**MyShell).Proc[ ProcID ].flags = FALSE;
ResetShellPWD( ShellWh );
if( (err = GetCurrPath( str )) == noErr )
procPrintf( ShellWh, ProcID, "%s\n", str );
else
FileError( err );
/* Tell the shell that we're done */
SendOutToken( ShellWh, ProcID, PROC_BREAK );
/* Turn ourself off */
(**MyShell).Proc[ ProcID ].ProcActive = FALSE;
return( FALSE );
}
}
}